package com.lijianpo.util.extension.datamasking.annotation;

import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.lijianpo.util.extension.datamasking.SensitiveType;
import com.lijianpo.util.extension.datamasking.ser.SensitiveSerializer;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 掩码类型标记
 * <p>
 * 在Java类字段中标记，对象在被DataMask序列化的时候，就可以自动被掩码
 *
 * @author zhangyang
 * @date 2020/10/30 10:58
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotationsInside
@JsonSerialize(using = SensitiveSerializer.class)
public @interface Sensitive {

    /**
     * 脱敏类型
     *
     * @return
     */
    SensitiveType type() default SensitiveType.Default;

    /**
     * 如果首尾保留数量一样的，可以只用一个数字 {2} 表示首尾各保留2个字符
     * {1,2} 表示头部保留1个字符串，尾部保留2个字符串
     *
     * @return
     */
    int[] keepChars() default {-1};

}
